﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Company.WFBase
{
    // partial 表示分布类，一个类可以在不同文件中编写，编译时将这些分布类合成一个完整的类
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();

            // 多个button按钮绑定同一个函数，根据Tag输出各自内容。  但若有千百个按钮，难道要写千百行+=吗？
            //this.button1.Click += this.button_Click;
            //this.button2.Click += this.button_Click;
            //this.button3.Click += this.button_Click;

            BtnEvent(true);
        }

        private void BtnEvent(bool isAdd)
        {
            foreach (Control c in this.Controls)
            {
                // 这是按照控件类型判断。这样是所有的Button都绑定该函数，当然也可以再加tag判断
                //if (c is Button)
                //{
                //    c.Click += this.button_Click;        
                //    //Button btn = (Button)c;
                //    //btn.Click += this.button_Click;
                //}

                // 这是按照Tag中的数据进行判断
                if (c.Tag != null && c.Tag.ToString().Contains("btn"))
                {
                    if(isAdd)
                        c.Click += this.button_Click;
                    else
                        c.Click -= this.button_Click;
                }
            }
        }

        // 多次+=，则绑定的事件会重复多次执行
        private void btnAdd_Click(object sender, EventArgs e)
        {
            BtnEvent(true);
        }

        // 多次-=   或者在没+=A的情况下-=A不会出问题
        private void btnRemove_Click(object sender, EventArgs e)
        {
            BtnEvent(false);
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {

        }

        //事件响应方法，
        private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button_Click(object sender, EventArgs e)
        {
            // sender是事件源，这里即是被点击的按钮
            Button btn = (Button)sender;
            //MessageBox.Show(btn.Text);

            // Tag属性可以在控件上存储数据
            string str = btn.Tag.ToString();
            MessageBox.Show(str.Substring(str.IndexOf("_")+1));
        }

        private void btnCreate1_Click(object sender, EventArgs e)
        {
            FrmChild frmChild = new FrmChild("新窗体");
            frmChild.Show();
        }

        private void btnCreate2_Click(object sender, EventArgs e)
        {
            FrmChild frmChild = new FrmChild("新窗体");
            DialogResult dialogResult = frmChild.ShowDialog();   // ShowDialog可以接收返回值，且以模态方式显示子窗体，即不关掉子窗体，无法操作其他窗体
            if(dialogResult==DialogResult.OK)
            {
                MessageBox.Show(frmChild.Tag.ToString());
            }
        }
    }
}
